A synthesis of dryland restoration techniques.

Purpose

To quantitatively examine the efficacy of vegetation restoration in drylands globally.

Questions

  1. What is the global extent of research that directly examined restoration of drylands?
  2. What were the common measures?
  3. Is the restoration of vegetation a common and primary focus?
  4. How frequently does the restoration measure outcomes beyond the focal species?
  5. What were the primary restoration goals as reported by primary authors?
  6. How much variation was there in the techniques tested and how long were experiments monitored and tested?
  7. How relatively effective were the techniques?

Step 2. Sort

A summary of sort process using PRISMA.

library(PRISMAstatement)
prisma(found = 1504,
       found_other = 5,
       no_dupes = 1039, 
       screened = 1039, 
       screen_exclusions = 861, 
       full_text = 178,
       full_text_exclusions = 100, 
       qualitative = 100, 
       quantitative = 78,
       width = 800, height = 800)

Step 3. Synthesize

Check data and calculate necessary measures.

data <- read_csv("data/data.csv")
data <- data %>%
  mutate(lrr = log(mean.t/mean.c), rii = ((mean.t-mean.c)/(mean.t + mean.c)), var.es = ((sd.t^2/n.t*mean.t^2) + (sd.c^2/n.c*mean.c^2)))
data
## # A tibble: 3,291 x 48
##    study.ID    ID publication.year data.year exp.year `exp.length (mo…
##       <dbl> <dbl>            <dbl>     <dbl>    <dbl>            <dbl>
##  1        1   1.1             2018        NA       NA               NA
##  2        1   1.1             2018        NA       NA               NA
##  3        1   1.1             2018        NA       NA               NA
##  4        1   1.2             2018        NA       NA               NA
##  5        1   1.2             2018        NA       NA               NA
##  6        1   1.2             2018        NA       NA               NA
##  7        1   1.3             2018        NA       NA               NA
##  8        1   1.3             2018        NA       NA               NA
##  9        1   1.3             2018        NA       NA               NA
## 10        1   1.4             2018        NA       NA               NA
## # ... with 3,281 more rows, and 42 more variables: disturbance <chr>,
## #   focus <chr>, technique <chr>, paradigm <chr>, hypothesis <chr>,
## #   pathway <chr>, plant.species <chr>, target.plant <chr>,
## #   measure.success <chr>, measured.factor <chr>, factor.levels <chr>,
## #   treatment <chr>, control <chr>, unit <chr>, Nsites <dbl>, n.t <dbl>,
## #   n.c <dbl>, ntotalsamples <dbl>, mean.t <dbl>, mean.c <dbl>,
## #   sd.t <dbl>, sd.c <dbl>, se.t <dbl>, se.c <dbl>, `p-value` <dbl>,
## #   df <dbl>, measure.dispersion <chr>, lat <dbl>, long <dbl>,
## #   continent <chr>, country <chr>, ecosystem <chr>, `elevation
## #   (m)` <dbl>, `MAP (mm)` <dbl>, aridity.index <dbl>,
## #   `potential.evaporation (mm)` <dbl>, grazing <chr>, soil <chr>,
## #   notes <chr>, lrr <dbl>, rii <dbl>, var.es <dbl>
#consider adding some other effect size measures and/or study-level data too

Step 4. Summarize

Explore summary level data of all data. Explore aggregation levels that support the most reasonable data structure and minimize non-independence issues.

#evidence map####
require(maps)
world<-map_data("world")
map<-ggplot() + geom_polygon(data=world, fill="gray50", aes(x=long, y=lat, group=group))
map + geom_point(data=data, aes(x=long, y=lat)) #render a literal map, i.e. evidence map, of where we study the niche in deserts globally

#aggregation####
data.simple <- data %>%
  group_by(study.ID, paradigm, technique, measure.success) %>%
  summarise(n = n(), mean.lrr = mean(lrr), mean.rii = mean(rii), mean.var = mean(var.es))

se <- function(x){
  sd(x)/sqrt(length(x))
}

simple.data <- data %>% group_by(study.ID, paradigm) %>% summarise(mean.rii = mean(rii), error = se(rii))
simple.data <- na.omit(simple.data)


#viz for aggregation####
ggplot(na.omit(data.simple), aes(technique, n, fill = paradigm)) + 
  geom_bar(stat = "identity") + 
  coord_flip() + 
  scale_fill_brewer(palette = "Paired")

ggplot(na.omit(data.simple), aes(measure.success, n, fill = paradigm)) + 
  geom_bar(stat = "identity") + 
  coord_flip() + 
  scale_fill_brewer(palette = "Paired")

Step 5. Statistics

Meta and conventional statistical models to explore relative efficacy.

library(plotrix) #for quick s.e. calculations sometimes needed for data tidy step
library(meta) #nice package for most meta-statistics

#assign model (typically a nice meta. function from one of several packages such as meta, metafor, or netmeta)
m <- metagen(mean.rii, error, studlab = study.ID, byvar = paradigm, data = simple.data) #fit generic meta-analysis to an object
m
##                         95%-CI %W(fixed) %W(random) paradigm
## 1    0.1004 [-0.0416;  0.2424]       0.5        3.9  passive
## 3   -0.1868 [-0.2919; -0.0817]       1.0        4.2   active
## 6    0.1973 [-0.1756;  0.5702]       0.1        2.0   active
## 9    0.1901 [ 0.1523;  0.2280]       7.5        4.6  passive
## 13  -0.0083 [-0.0913;  0.0747]       1.6        4.3   active
## 20  -0.2808 [-0.3514; -0.2102]       2.2        4.4   active
## 29  -0.2971 [-0.3868; -0.2073]       1.3        4.3   active
## 30  -0.0326 [-0.1910;  0.1257]       0.4        3.7   active
## 51   0.1280 [-0.0646;  0.3205]       0.3        3.4   active
## 66   0.0762 [ 0.0222;  0.1302]       3.7        4.5  passive
## 68  -0.1772 [-0.2845; -0.0699]       0.9        4.2   active
## 69   0.5020 [ 0.3552;  0.6489]       0.5        3.8  passive
## 77   0.0613 [-0.8629;  0.9854]       0.0        0.5   active
## 87  -0.0138 [-0.0406;  0.0131]      14.8        4.6   active
## 88  -0.1297 [-0.1597; -0.0997]      11.9        4.6   active
## 95  -0.2280 [-0.3094; -0.1466]       1.6        4.3   active
## 104  0.3069 [ 0.2619;  0.3519]       5.3        4.5   active
## 109  0.4675 [ 0.2613;  0.6737]       0.3        3.3   active
## 111  0.0748 [ 0.0406;  0.1091]       9.2        4.6   active
## 121 -0.0229 [-0.0432; -0.0026]      26.0        4.6   active
## 135  0.0859 [ 0.0317;  0.1401]       3.7        4.5  passive
## 147 -0.2642 [-0.4402; -0.0882]       0.3        3.6   active
## 210 -0.3286 [-0.4648; -0.1924]       0.6        3.9   active
## 239  0.2968 [-0.1971;  0.7907]       0.0        1.4  passive
## 247 -0.3379 [-0.3809; -0.2950]       5.8        4.5  passive
## 256  0.0430 [-0.0941;  0.1801]       0.6        3.9  passive
## 
## Number of studies combined: k = 26
## 
##                                          95%-CI     z p-value
## Fixed effect model   -0.0149 [-0.0253; -0.0045] -2.82  0.0048
## Random effects model -0.0109 [-0.0804;  0.0586] -0.31  0.7585
## 
## Quantifying heterogeneity:
## tau^2 = 0.0273; H = 5.92 [5.36; 6.54]; I^2 = 97.1% [96.5%; 97.7%]
## 
## Test of heterogeneity:
##       Q d.f.  p-value
##  876.35   25 < 0.0001
## 
## Results for subgroups (fixed effect model):
##                      k                     95%-CI      Q  tau^2   I^2
## paradigm = passive   8  0.0177 [-0.0043;  0.0396] 398.01 0.0642 98.2%
## paradigm = active   18 -0.0242 [-0.0360; -0.0125] 467.45 0.0200 96.4%
## 
## Test for subgroup differences (fixed effect model):
##                     Q d.f.  p-value
## Between groups  10.89    1   0.0010
## Within groups  865.46   24 < 0.0001
## 
## Results for subgroups (random effects model):
##                      k                    95%-CI      Q  tau^2   I^2
## paradigm = passive   8  0.1046 [-0.0800; 0.2892] 398.01 0.0642 98.2%
## paradigm = active   18 -0.0608 [-0.1339; 0.0124] 467.45 0.0200 96.4%
## 
## Test for subgroup differences (random effects model):
##                     Q d.f. p-value
## Between groups   2.67    1  0.1026
## 
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
#no difference in random effects model by paradigm but fixed yes. Hetereogeneity is significantly different so a. fixed not representative and b. need a better model
#forest(m,  xlim="symmetric", plotwidth=unit(1, "cm"))
forest(m)

radial(m)